/* apue.h - 第三版 */
#ifndef _APUE_H
#define _APUE_H

#define _POSIX_C_SOURCE 200809L

#include <sys/types.h>      /* 基本系统数据类型 */
#include <sys/stat.h>       /* 文件状态 */
#include <sys/termios.h>    /* 终端I/O */

#ifndef TIOCGWINSZ
#include <sys/ioctl.h>      /* 窗口大小 */
#endif

#include <stdio.h>          /* 标准I/O函数 */
#include <stdlib.h>         /* 常用库函数 */
#include <stddef.h>         /* 偏移量和基本类型 */
#include <string.h>         /* 字符串操作 */
#include <unistd.h>         /* 符号常量 */
#include <signal.h>         /* 信号处理 */
#include <errno.h>          /* 错误号定义 */

/* 书中自定义的错误处理函数 */
void err_sys(const char *, ...);
void err_quit(const char *, ...);
void err_ret(const char *, ...);
void err_dump(const char *, ...);
void err_msg(const char *, ...);

/* 书中自定义的常用函数 */
int      lock_reg(int, int, int, off_t, int, off_t);
void     sleep_us(unsigned int);
ssize_t  readn(int, void *, size_t);
ssize_t  writen(int, const void *, size_t);

/* 最大行长度 */
#define MAXLINE 4096

/* 默认文件访问权限 */
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)

/* 默认目录访问权限 */
#define DIR_MODE (FILE_MODE | S_IXUSR | S_IXGRP | S_IXOTH)

/* 网络IPC相关的额外包含 - 可能需要添加到apue.h或单独包含 */
#include <sys/socket.h>     /* 套接字定义 */
#include <netinet/in.h>     /* Internet地址族 */
#include <arpa/inet.h>      /* 地址转换函数 */
#include <netdb.h>          /* 主机信息 */
#include <sys/select.h>     /* I/O多路复用 */
#include <poll.h>           /* poll函数 */

#endif /* _APUE_H */
